package main

import (
	"fmt"
	"reflect"
)

//定义一个Cal结构体
type Cal struct {
	Num1 int
	Num2 int
}

//定义一个结构体方法
func (c Cal) GetSub(n1, n2 int) int {
	return n1 + n2
}

func main() {

	//定义一个空的 cal 结构体
	var cal *Cal
	//通过反射创建一个变量结构体实例
	newCal := reflect.New(reflect.TypeOf(cal).Elem())
	cal = newCal.Interface().(*Cal)
	newCal = newCal.Elem()
	newCal.FieldByName("Num1").SetInt(73)
	newCal.FieldByName("Num2").SetInt(27)

	//创建一个反射值的切片
	var params []reflect.Value
	params = append(params, reflect.ValueOf(cal.Num1))
	params = append(params, reflect.ValueOf(cal.Num2))
	//通过反射调用变量结构体方法
	res := newCal.MethodByName("GetSub").Call(params)
	//打印变量结构体方法返回的值
	fmt.Println(res[0].Int())
}